#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>

bool is_daemon = false;

void daemon(void)
{
    int pid;

    pid = fork();

    if (pid > 0)
        exit(0);
    else if (pid < 0)
        exit(1);

    /* 是第一子进程，后台继续执行
     * 第一子进程成为新的会话组长和进程组长
     */
    setsid();

    pid = fork();

    if(pid > 0)
        exit(0);
    else if( pid < 0)
        exit(1);

    int nfd = open("/dev/null", O_RDWR);
    dup2(nfd, 0);
    dup2(nfd, 1);
    dup2(nfd, 2);
    close(nfd);

    umask(0);

    is_daemon = true;
}
